package com.cyx;

import java.util.HashMap;
import java.util.Scanner;

/**
 * @author 陈裕星
 * @version 1.0
 * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。
 * 输入: s = "abcabcbb"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 */
public class 第三题无重复字符的最长串 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();

        char[] chars = str.toCharArray();
        //定义两个指针，快指针和慢指针
        int fast = 0,slow = 0,max = 0;
        //定义HashMap集合存储遍历过的字符和下标
        HashMap<Character,Integer> last_access = new HashMap<>();

        //遍历字符数组
        for (; fast < chars.length; fast++) {
            //判断last_access是否有这个字符
            if(last_access.containsKey(chars[fast])){
                //在最后一次访问基础上slow向后移
                //注意：这里slow可能会回退，不能让其回退 例如abba
//                slow = last_access.get(chars[fast]) + 1;
                slow = Math.max(slow,last_access.get(chars[fast]) + 1);
            }
            //没有这个字符则加入到last_access中
            last_access.put(chars[fast],fast);
            max = Math.max(max,fast-slow+1);
        }
        System.out.println(max);
    }
}
